// 分类管理控制器
const { Category, Animal } = require('../models');

// 显示分类列表
exports.showCategories = async (req, res) => {
  try {
    const categories = await Category.findAll({
      order: [['createdAt', 'DESC']]
    });
    
    res.render('categories/index', {
      title: '分类管理',
      categories
    });
  } catch (error) {
    console.error('获取分类列表错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 显示添加分类页面
exports.showAddCategory = (req, res) => {
  res.render('categories/add', {
    title: '添加分类'
  });
};

// 添加分类
exports.addCategory = async (req, res) => {
  const { id, name, icon, color } = req.body;
  
  try {
    // 检查ID是否已存在
    const existingCategory = await Category.findByPk(id);
    if (existingCategory) {
      req.flash('error', '分类ID已存在');
      return res.redirect('/admin/categories/add');
    }
    
    // 创建分类
    await Category.create({
      id,
      name,
      icon,
      color
    });
    
    req.flash('success', '分类添加成功');
    res.redirect('/admin/categories');
  } catch (error) {
    console.error('添加分类错误:', error);
    req.flash('error', '添加分类失败');
    res.redirect('/admin/categories/add');
  }
};

// 显示编辑分类页面
exports.showEditCategory = async (req, res) => {
  try {
    const category = await Category.findByPk(req.params.id);
    
    if (!category) {
      req.flash('error', '分类不存在');
      return res.redirect('/admin/categories');
    }
    
    res.render('categories/edit', {
      title: '编辑分类',
      category
    });
  } catch (error) {
    console.error('获取分类信息错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 更新分类
exports.updateCategory = async (req, res) => {
  const { name, icon, color } = req.body;
  
  try {
    const category = await Category.findByPk(req.params.id);
    
    if (!category) {
      req.flash('error', '分类不存在');
      return res.redirect('/admin/categories');
    }
    
    // 更新分类信息
    await category.update({
      name,
      icon,
      color
    });
    
    req.flash('success', '分类更新成功');
    res.redirect('/admin/categories');
  } catch (error) {
    console.error('更新分类错误:', error);
    req.flash('error', '更新分类失败');
    res.redirect(`/admin/categories/edit/${req.params.id}`);
  }
};

// 删除分类
exports.deleteCategory = async (req, res) => {
  try {
    const category = await Category.findByPk(req.params.id);
    
    if (!category) {
      req.flash('error', '分类不存在');
      return res.redirect('/admin/categories');
    }
    
    // 检查是否有关联的动物
    const animalCount = await Animal.count({ where: { categoryId: req.params.id } });
    if (animalCount > 0) {
      req.flash('error', `该分类下有${animalCount}个动物，不能删除`);
      return res.redirect('/admin/categories');
    }
    
    await category.destroy();
    
    req.flash('success', '分类删除成功');
    res.redirect('/admin/categories');
  } catch (error) {
    console.error('删除分类错误:', error);
    req.flash('error', '删除分类失败');
    res.redirect('/admin/categories');
  }
};